{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Biologically Inspired Computation (F20BC/F21BC)\n",
    "\n",
    "Clarence Deltel (ced2) <br />\n",
    "H00330739 <br />\n",
    "\n",
    "Dimitri Accad (dsa2) <br />\n",
    "H00330740 <br />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import of the libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import os \n",
    "import random\n",
    "from random import uniform\n",
    "import numpy as np\n",
    "import copy\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.display import display, clear_output\n",
    "from mpl_toolkits import mplot3d\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Loading data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      " dict_keys(['1in_cubic.txt', '1in_linear.txt', '1in_sine.txt', '1in_tanh.txt', '2in_complex.txt', '2in_xor.txt'])\n"
     ]
    }
   ],
   "source": [
    "datafilelist = os.listdir('./Data')\n",
    "datafilelist.sort()\n",
    "\n",
    "all_data = {}\n",
    "\n",
    "for i in datafilelist[0:4]:\n",
    "    tmp_data = pd.read_csv(\"Data/\"+i, delim_whitespace=True, header=None,names=[\"X\", \"Y\"])\n",
    "    all_data[i] = tmp_data\n",
    "for i in datafilelist[4:]:    \n",
    "    tmp_data = pd.read_csv(\"Data/\"+i, delim_whitespace=True, header=None,names=[\"X\", \"Y\",\"Z\"])\n",
    "    all_data[i] = tmp_data\n",
    "    \n",
    "print(\"\\n\",all_data.keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Implemention of a multi-layer ANN architecture\n",
    "\n",
    "First of all, we implemented different activation functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Function list : ['sigmoid', 'null', 'tanh', 'cos', 'gauss', 'sin', 'reLU']\n"
     ]
    }
   ],
   "source": [
    "def sigmoid(z):\n",
    "    \"\"\"\n",
    "    Computes the sigmoid of z.\n",
    "    \"\"\"\n",
    "    return (1.0/(1.0+np.exp(-z)))\n",
    "\n",
    "def null(z):\n",
    "    \"\"\"\n",
    "    Computes the Null of z.\n",
    "    \"\"\"\n",
    "    return 0\n",
    "\n",
    "def tanh(z):\n",
    "    \"\"\"\n",
    "    Computes the Hyperbolic Tangent of z.\n",
    "    \"\"\"\n",
    "    return np.tanh(z)\n",
    "\n",
    "def cos(z):\n",
    "    \"\"\"\n",
    "    Computes the Cosin of z.\n",
    "    \"\"\"\n",
    "    return np.cos(z)\n",
    "\n",
    "def gauss(z):\n",
    "    \"\"\"\n",
    "    Computes the Gaussian of z.\n",
    "    \"\"\"\n",
    "    return np.exp(-((z**2)/2))\n",
    "\n",
    "def sin(z):\n",
    "    \"\"\"\n",
    "    Computes the Gaussian of z.\n",
    "    \"\"\"\n",
    "    return np.sin(z)\n",
    "\n",
    "\n",
    "def reLU(z):\n",
    "    size = z.shape\n",
    "    for i in range (size[0]):\n",
    "        for j in range (size[1]):\n",
    "            if(z[i,j]<0):\n",
    "                z[i,j]= 0\n",
    "            elif(z[i,j]>= 0):\n",
    "                z[i,j] = z[i,j]\n",
    "    return z\n",
    "\n",
    "function_list=[\"sigmoid\",\"null\",\"tanh\",\"cos\",\"gauss\",\"sin\",\"reLU\"]\n",
    "print(\"Function list :\",function_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Creation of the list of weight's matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def ThetaListGen(n_hidden_layer,n_neuron_layer,space_dim,D):\n",
    "    ThetaList =[]\n",
    "    for i in range (n_hidden_layer+1):\n",
    "        if (i==0):#first layer\n",
    "            #input dimension checking\n",
    "            if(D==1):\n",
    "                Theta=np.random.uniform(-space_dim,space_dim,(1,n_neuron_layer[i]))\n",
    "                ThetaList.append(Theta)\n",
    "            elif(D==2):\n",
    "                Theta=np.random.uniform(-space_dim,space_dim,(2,n_neuron_layer[i]))\n",
    "                ThetaList.append(Theta)\n",
    "        if (i==n_hidden_layer): #last layer\n",
    "            Theta=np.random.uniform(-space_dim,space_dim,(n_neuron_layer[i-1],1))\n",
    "            ThetaList.append(Theta)\n",
    "            return ThetaList\n",
    "        elif (i != 0 and i!=n_hidden_layer):\n",
    "            Theta=np.random.uniform(-space_dim,space_dim,(n_neuron_layer[i-1],n_neuron_layer[i]))\n",
    "            ThetaList.append(Theta)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Flattening the weight list for the ANN Particule position"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def MatrixFlattening(ThetaList):\n",
    "    layer=len(ThetaList)\n",
    "    vector_position=[]\n",
    "    for i in range(layer):\n",
    "        vector_position.extend(ThetaList[i].flatten())\n",
    "    return vector_position"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Rebuild of the weight list from the position vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def MatrixConcentrate(flat,n_hidden_layer,n_neuron_layer,D):\n",
    "    ThetaList =[]\n",
    "    position1=0\n",
    "    for i in range (n_hidden_layer+1):\n",
    "        if (i==0):#first layer\n",
    "            #input dimension checking\n",
    "            if(D==1):\n",
    "                position2=position1+n_neuron_layer[i]*1\n",
    "                A = flat[position1:position2]\n",
    "                Theta = np.reshape(A, (-1, n_neuron_layer[i]))\n",
    "                ThetaList.append(Theta)\n",
    "            elif(D==2):\n",
    "                position2=position1+n_neuron_layer[i]*2\n",
    "                A = flat[position1:position2]\n",
    "                Theta = np.reshape(A, (2, n_neuron_layer[i]))\n",
    "                ThetaList.append(Theta)\n",
    "        if (i==n_hidden_layer):#last layer\n",
    "            position1=position2\n",
    "            position2=position1+n_neuron_layer[i-1]*1\n",
    "            A = flat[position1:position2]\n",
    "            Theta = np.reshape(A, (n_neuron_layer[i-1], -1))\n",
    "            ThetaList.append(Theta)\n",
    "            return ThetaList            \n",
    "        elif (i != 0 and i!=n_hidden_layer):\n",
    "            position1=position2\n",
    "            position2=position1+n_neuron_layer[i]*n_neuron_layer[i-1]\n",
    "            A = flat[position1:position2]\n",
    "            Theta = np.reshape(A, (-1, n_neuron_layer[i]))\n",
    "            ThetaList.append(Theta)        \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### ANN prediction from weight list, input and activation function : Feedforward propagation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def ANN(X,ThetaList,function,D):\n",
    "    number_of_layer=len(ThetaList)\n",
    "    g1=np.array(X)\n",
    "    \n",
    "    for i in range(number_of_layer):\n",
    "        Theta=np.array(ThetaList[i])\n",
    "        g1= globals()[function](np.dot(Theta.T,g1));\n",
    "    #input dimension checking\n",
    "    if (D==1):\n",
    "        return g1[0][0]\n",
    "    elif (D==2):\n",
    "        return g1[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### List of predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def getPredic (X_list,ThetaList,function,D):\n",
    "    y_predict=[]\n",
    "    #input dimension checking\n",
    "    if (D==1):\n",
    "        for i in X_list:\n",
    "            y_predict.append(ANN(i,ThetaList,function,D))\n",
    "    elif (D==2):\n",
    "        X=X_list[0]\n",
    "        Y=X_list[1]\n",
    "        for i in range (len(X)):\n",
    "            a= [X[i],Y[i]]\n",
    "            y_predict.append(ANN(a,ThetaList,function,D))\n",
    "            \n",
    "    return y_predict"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Mean square error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def MSE(y_true, y_predict ):\n",
    "    MSE=0;\n",
    "    for i in range (len(y_true)):\n",
    "        MSE=MSE+((y_true[i]-y_predict[i])**2)\n",
    "   \n",
    "    MSE=MSE/len(y_true)\n",
    "\n",
    "    return MSE"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Implement a PSO algorithm\n",
    "\n",
    "#### Hyper Parameter : PSO"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "swarmsize = 50\n",
    "ret_velo = 0.5\n",
    "ret_persoBest = 0.8\n",
    "ret_informants = 0.5\n",
    "ret_globalBest = 0.2\n",
    "jumpSize = 0.5\n",
    "precision_treshold = 0.0001 \n",
    "max_iteration=50"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Hyper Parameter : ANN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Activation function list :  ['sigmoid', 'null', 'tanh', 'cos', 'gauss', 'sin', 'reLU']\n"
     ]
    }
   ],
   "source": [
    "print(\"Activation function list : \",function_list)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "space_dim = 3\n",
    "\n",
    "n_neuron_layer = [6,5,4,3]\n",
    "n_hidden_layer = len(n_neuron_layer)\n",
    "activation_function = function_list[2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Functions to predict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Data to predict : \n",
      " dict_keys(['1in_cubic.txt', '1in_linear.txt', '1in_sine.txt', '1in_tanh.txt', '2in_complex.txt', '2in_xor.txt'])\n"
     ]
    }
   ],
   "source": [
    "print(\"Data to predict : \\n\",all_data.keys())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "function_to_predict=all_data['1in_cubic.txt']\n",
    "D=1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Class Particle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Particle():\n",
    "\n",
    "    def __init__(self):\n",
    "        \n",
    "        self.part_weight_matrix = ThetaListGen(n_hidden_layer,n_neuron_layer,space_dim,D)\n",
    "        self.part_position = MatrixFlattening(self.part_weight_matrix)\n",
    "        self.part_best_position = self.part_position \n",
    "        num_dim = len(self.part_position)\n",
    "        self.part_velocity = np.random.uniform(-1,1,(1,num_dim))[0]\n",
    "    def getBestPosition(self):\n",
    "        return self.part_best_position\n",
    "    def getCurrPosition(self):\n",
    "        return self.part_position\n",
    "    def getVelocity(self):\n",
    "        return self.part_velocity\n",
    "    \n",
    "    def getFitness(self):\n",
    "        #input dimension checking\n",
    "        if (D==1):\n",
    "            prediction = getPredic (function_to_predict[\"X\"],self.part_weight_matrix,activation_function,D)\n",
    "            fitness = MSE(function_to_predict[\"Y\"], prediction )\n",
    "        if(D==2):\n",
    "            prediction = getPredic([function_to_predict[\"X\"],function_to_predict[\"Y\"]],self.part_weight_matrix,activation_function,D)\n",
    "            fitness = MSE(function_to_predict[\"Z\"], prediction )\n",
    "        \n",
    "        return fitness\n",
    "    \n",
    "    def getThetaMatrix(self):\n",
    "        return self.part_weight_matrix \n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### The PSO algorithm\n",
    "##### Initialization of the swarm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "33  : best fitness : 0.01088735622426071\n",
      "34  : best fitness : 0.01088735622426071\n",
      "35  : best fitness : 0.01088735622426071\n",
      "36  : best fitness : 0.01088735622426071\n",
      "37  : best fitness : 0.01088735622426071\n",
      "38  : best fitness : 0.01088735622426071\n",
      "39  : best fitness : 0.01088735622426071\n",
      "40  : best fitness : 0.01088735622426071\n",
      "41  : best fitness : 0.01088735622426071\n",
      "42  : best fitness : 0.01088735622426071\n",
      "43  : best fitness : 0.01088735622426071\n",
      "44  : best fitness : 0.01088735622426071\n",
      "45  : best fitness : 0.01088735622426071\n",
      "46  : best fitness : 0.01088735622426071\n",
      "47  : best fitness : 0.01088735622426071\n",
      "48  : best fitness : 0.01088735622426071\n",
      "49  : best fitness : 0.01088735622426071\n",
      "50  : best fitness : 0.01088735622426071\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "P=[]\n",
    "for i in range(0,swarmsize):\n",
    "    P.append(Particle())\n",
    "\n",
    "gBest_fitness = float('inf') \n",
    "gBest_position = [None] * len(P[0].getCurrPosition())\n",
    "\n",
    "%matplotlib inline\n",
    "import time\n",
    "import pylab as pl\n",
    "from IPython import display\n",
    "\n",
    "if (D==1):\n",
    "    pl.plot(function_to_predict[\"X\"],function_to_predict[\"Y\"])\n",
    "    display.clear_output(wait=True)\n",
    "    display.display(pl.gcf())\n",
    "    time.sleep(1.0)\n",
    "    \n",
    "if (D==2):\n",
    "    ax = plt.axes(projection='3d')\n",
    "    ax.plot3D(function_to_predict[\"X\"], function_to_predict[\"Y\"], function_to_predict[\"Z\"], 'o')#,function_to_predict[\"X\"], function_to_predict[\"Y\"], function_to_predict[\"Z\"], '-o')\n",
    "    display.clear_output(wait=True)\n",
    "    display.display(pl.gcf())\n",
    "    time.sleep(1.0)\n",
    "    \n",
    "old_y=[]   \n",
    "iteration=0\n",
    "\n",
    "while (gBest_fitness > precision_treshold and iteration<max_iteration):\n",
    "    #return gBest_position from all the particles\n",
    "    for Particle_p in P:\n",
    "        pFitness = Particle_p.getFitness() #assess fitness\n",
    "        if gBest_fitness == float('inf') or pFitness < gBest_fitness:\n",
    "            gBest_fitness = pFitness\n",
    "            gBest_position = Particle_p.getBestPosition()\n",
    "            BestParticle = copy.copy(Particle_p)\n",
    "       \n",
    "    for Particle_j in P:\n",
    "        temp_list = P.copy()\n",
    "        temp_list.remove(Particle_j)\n",
    "        P_informants = random.choices(temp_list, k=5)\n",
    "        P_informants.append(Particle_j)\n",
    "        infoBest_fitness = float('inf')\n",
    "        \n",
    "        for Particle_i in P_informants:\n",
    "            pFitness = Particle_i.getFitness() #calculate fitness between informants!\n",
    "            if pFitness < infoBest_fitness:\n",
    "                infoBest_fitness = pFitness\n",
    "                infoBest_position = Particle_i.getBestPosition()\n",
    "        \n",
    "        vel_temp=[]\n",
    "        for i in range(len(Particle_j.getCurrPosition())):\n",
    "            b = uniform(0,ret_persoBest)\n",
    "            c = uniform(0,ret_informants)\n",
    "            d = uniform(0,ret_globalBest)\n",
    "\n",
    "            \n",
    "            new_vi = ret_velo*Particle_j.getVelocity()[i] + \\\n",
    "            b*(Particle_j.getBestPosition()[i]-Particle_j.getCurrPosition()[i]) + \\\n",
    "            c*(infoBest_position[i]-Particle_j.getCurrPosition()[i]) + \\\n",
    "            d*(gBest_position[i]-Particle_j.getCurrPosition()[i])\n",
    "            \n",
    "            vel_temp.append(new_vi)\n",
    "            \n",
    "        \n",
    "        Particle_j.part_velocity = vel_temp\n",
    "    \n",
    "    \n",
    "    for Particle_x in P:\n",
    "        pos_temp = []\n",
    "        for i in range(len(Particle_x.getCurrPosition())):\n",
    "            new_po = Particle_x.getCurrPosition()[i] + jumpSize * Particle_x.getVelocity()[i]\n",
    "            pos_temp.append(new_po)\n",
    "        Particle_x.part_position = pos_temp\n",
    "        Particle_x.part_weight_matrix = MatrixConcentrate(Particle_x.part_position,n_hidden_layer,n_neuron_layer,D)\n",
    "        \n",
    "    if (D==2):\n",
    "        y_pred=getPredic([function_to_predict[\"X\"],function_to_predict[\"Y\"]],BestParticle.part_weight_matrix,activation_function,D) \n",
    "    elif (D==1):\n",
    "        y_pred = getPredic (function_to_predict[\"X\"],BestParticle.part_weight_matrix,activation_function,D)        \n",
    "            \n",
    "            \n",
    "    print(iteration,\" : best fitness :\",gBest_fitness)\n",
    "    if(old_y != y_pred):\n",
    "        if (D==1):\n",
    "            pl.plot(function_to_predict[\"X\"],y_pred)\n",
    "            display.clear_output(wait=True)\n",
    "            display.display(pl.gcf())\n",
    "            old_y=y_pred.copy()\n",
    "        if (D==2):\n",
    "            ax.plot3D(function_to_predict[\"X\"], function_to_predict[\"Y\"], y_pred, '+')\n",
    "            display.clear_output(wait=True)\n",
    "            display.display(pl.gcf())\n",
    "            old_y=y_pred.copy()\n",
    "   \n",
    "    iteration=iteration+1   \n",
    "\n",
    "print(iteration,\" : best fitness :\",gBest_fitness)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Graph of the predicted value from the best Particle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ThetaList=BestParticle.getThetaMatrix()\n",
    "if (D==2):\n",
    "    y_pred=getPredic([function_to_predict[\"X\"],function_to_predict[\"Y\"]],ThetaList,activation_function,D)\n",
    "    plt.plot(function_to_predict[\"X\"],function_to_predict[\"Z\"],'+',function_to_predict[\"X\"],y_pred,'+' )\n",
    "    plt.show()\n",
    "    plt.plot(function_to_predict[\"Y\"],function_to_predict[\"Z\"],'+',function_to_predict[\"Y\"],y_pred,'+' )\n",
    "    plt.show()\n",
    "    ax = plt.axes(projection='3d')\n",
    "    ax.plot3D(function_to_predict[\"X\"], function_to_predict[\"Y\"], function_to_predict[\"Z\"], '+')#,function_to_predict[\"X\"], function_to_predict[\"Y\"], function_to_predict[\"Z\"], '-o')\n",
    "    ax.plot3D(function_to_predict[\"X\"], function_to_predict[\"Y\"], y_pred, '.')\n",
    "    \n",
    "elif (D==1):\n",
    "    y_pred = getPredic (function_to_predict[\"X\"],ThetaList,activation_function,D)\n",
    "    plt.plot(function_to_predict[\"X\"],function_to_predict[\"Y\"],'+',function_to_predict[\"X\"],y_pred,'+' )\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
